package com.jiangyg.mall.admin.service;

import com.jiangyg.mall.admin.dto.ResourceDTO;
import com.jiangyg.mall.admin.vo.ResourceVO;
import com.jiangyg.mall.core.utils.tree.Tree;

import java.util.List;
import java.util.Map;

/**
 * 类描述：系统资源管理Service接口
 *
 * @author jiangyg
 * @version 2.0
 * @date 2020-07-30
 */
public interface ResourceService {

    /**
     * 功能描述：获取登录用户的资源树
     *
     * @param type   类型：1-菜单，2-所有资源
     * @param userId 用户ID，为空查询所有用户
     * @return 菜单列表
     */
    List<Tree> selectTree(String type, Long userId) throws Exception;

    /**
     * 功能描述：根据上级节点ID查询用户资源列表
     *
     * @param pid    上级节点ID
     * @param userId 用户ID，为空查询所有用户
     * @return 返回资源信息
     */
    List<ResourceVO> selectListByPid(Long pid, Long userId) throws Exception;

    /**
     * 功能描述：保存或者修改资源
     *
     * @param dto 资源信息
     * @return 返回是否操作成功 boolean
     */
    boolean saveOrUpdate(ResourceDTO dto) throws Exception;

    /**
     * 功能描述：根据ID获取资源信息
     *
     * @param resourceId 资源ID
     * @return 返回资源信息
     */
    ResourceVO selectById(Long resourceId) throws Exception;

    /**
     * 功能描述：删除资源
     *
     * @param resourceIds 资源主键
     * @return 返回是否操作成功 boolean
     */
    boolean delete(List<Long> resourceIds);

    /**
     * 功能描述：检查指定资源下是否含有子集
     *
     * @param id 资源主键
     * @return 返回boolean，true表示有子集
     */
    boolean checkHaveChildren(Long id);

    /**
     * 功能描述：根据用户ID查询授权信息
     *
     * @param userId 用户ID
     * @return 结果
     */
    List<String> selectGrantedAuthorities(Long userId);

    /**
     * 功能描述：查询用户授权菜单
     *
     * @param userId 用户ID
     * @return 结果
     */
    Map<String, Object> selectUserGrantedMenu(Long userId) throws Exception;

}
